<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
// async和await
// 作用：是异步终极解决方案——》是一对关键词，需要配合使用

// async关键字，
// 1. async用于修饰一个函数，表示该函数是异步的，=> 返回一个promsie对象
        async function fn(){
            // 内部按理说，应该写一些异步的代码
            return 'hello async'
        }

        console.log(fn())

// 2.1 如果在async函数内部没有 await，此时async是没有意义的，函数内部就全是同步内容
        async function foo(){
            let num = 100
            console.log(num)
        }
        foo()
        console.log(200)
// 2.2 如果在async函数内部遇到了await，await下面那一行的代码会以异步处理，相当于.then的回调
        async function foo(){
            let num = await 100  // ==> 这一行是同步执行的，
            // await下面的都相当于是放到了.then()的回调函数中
            console.log(333)
        }

        // ===> 相当于  
        function foo(){
            return Promise.resolve(100).then(num => {
                console.log(num)
                console.log(222)
                console.log(333)
            })
        }
    // 3. async函数内部return语句返回的值，会成为then方法回调函数的参数。
        async function fn(){
            // 内部按理说，应该写一些异步的代码
            return 'hello async'
        }

        fn().then(res => {
            console.log(res)
        })
    </script>
</body>
</html>